﻿using DEMO.Y2015CS58.LIB;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DEMO.Y2015CS58.UI
{
    public partial class frmDemoDBCustomer : Form
    {
        string connetionString = @"Data Source=D630;Initial Catalog=XUATNHAPTON;Persist Security Info=True;User ID=sa;Password=123456";

        string mod; // MAD: Thêm; MED: Sửa, MDE: Xóa

        public frmDemoDBCustomer()
        {
            InitializeComponent();
            btnAdd.Enabled = false;
            btnDelete.Enabled = false;
            btnEdit.Enabled = false;
            btnSave.Enabled = false;
            btnShowData.Enabled = false;
            groupBox1.Enabled = false;
        }

        private bool CheckConnection()
        {
            try
            {
                SqlConnection conn;
                conn = new SqlConnection(connetionString);
                conn.Open();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        private DataTable LoadCustomer()
        {
            try
            {
                SqlConnection conn;
                conn = new SqlConnection(connetionString);
                conn.Open();
                String sql = "select * from KHACHHANG";
                SqlDataAdapter da = new SqlDataAdapter(sql, conn);
                DataTable dt = new DataTable();
                da.Fill(dt);
                conn.Close();
                return dt;
            }
            catch
            {
                return null;
            }
        }
        private bool InsertCustomer(string sMaKH, string sTenKH, string sSoTK, string sDiaChi)
        {
            try
            {
                SqlConnection conn;
                conn = new SqlConnection(connetionString);
                String sqlcmd = String.Format("insert into  KHACHHANG (MaKH, TenKH,SoTK,DiaChi) values ('{0}',N'{1}','{2}',N'{3}')", sMaKH, sTenKH, sSoTK, sDiaChi);// câu lệnh insert cần thực hiện
                SqlCommand cmd = new SqlCommand(sqlcmd, conn);
                conn.Open();
                int effRows = cmd.ExecuteNonQuery();
                conn.Close();
                if (effRows > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }

        private bool UpdateCustomer(string sMaKH, string sTenKH, string sSoTK, string sDiaChi)
        {
            try
            {
                SqlConnection conn;
                conn = new SqlConnection(connetionString);
                String sqlcmd = String.Format("Update  KHACHHANG set TenKH=N'{0}',SoTK=N'{1}',DiaChi=N'{2}' WHERE MaKH = '{3}'", sTenKH, sSoTK, sDiaChi, sMaKH);
                SqlCommand cmd = new SqlCommand(sqlcmd, conn);
                cmd.Connection.Open();
                int effRows = cmd.ExecuteNonQuery();
                conn.Close();
                if (effRows > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }
        private bool DeleteCustomer(string sMaKH)
        {
            try
            {
                SqlConnection conn;
                conn = new SqlConnection(connetionString);
                String sqlcmd = String.Format("DELETE KHACHHANG WHERE MaKH='{0}'", sMaKH);
                SqlCommand cmd = new SqlCommand(sqlcmd, conn);
                cmd.Connection.Open();
                int effRows = cmd.ExecuteNonQuery();
                conn.Close();
                if (effRows > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }

        private void btnTestConnection_Click(object sender, EventArgs e)
        {
            btnAdd.Enabled = false;
            btnDelete.Enabled = false;
            btnEdit.Enabled = false;
            btnSave.Enabled = false;
            groupBox1.Enabled = false;

            if (CheckConnection())
            
            {
                MessageBox.Show("Kết nối cơ sở dữ liệu thành công.");
                btnShowData.Enabled = true;
            }
            else
            {
                btnShowData.Enabled = false;
                MessageBox.Show("Kết nối cơ sở dữ liệu thất bại.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnShowData_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt = LoadCustomer();
            dataGridView1.DataSource = dt;

            btnAdd.Enabled = true;
            if (dataGridView1.Rows.Count > 0)
            {
                btnDelete.Enabled = true;
                btnEdit.Enabled = true;
            }
            else
            {
                btnDelete.Enabled = false;
                btnEdit.Enabled = false;
            }
            btnSave.Enabled = false;
            groupBox1.Enabled = false;


        }
        private void dataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0 || dataGridView1.SelectedCells.Count > 0)
            {
                btnAdd.Enabled = true;
                btnDelete.Enabled = true;
                btnEdit.Enabled = true;
                btnSave.Enabled = false;
                groupBox1.Enabled = false;

                int rowIndex = dataGridView1.SelectedCells[0].RowIndex;

                txtMaKH.Text = dataGridView1.Rows[rowIndex].Cells["MaKH"].Value.ToString();
                txtTenKH.Text = dataGridView1.Rows[rowIndex].Cells["TenKH"].Value.ToString();
                txtSoTK.Text = dataGridView1.Rows[rowIndex].Cells["SoTK"].Value.ToString();
                txtDiaChi.Text = dataGridView1.Rows[rowIndex].Cells["DiaChi"].Value.ToString();
            }
        }

        private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            //if (dataGridView1.RowCount > 0)
            //{
            //    btnAdd.Enabled = true;
            //    btnDelete.Enabled = true;
            //    btnEdit.Enabled = true;
            //    btnSave.Enabled = false;
            //    groupBox1.Enabled = false;

            //    txtMaKH.Text = dataGridView1.Rows[e.RowIndex].Cells["MaKH"].Value.ToString();
            //    txtTenKH.Text = dataGridView1.Rows[e.RowIndex].Cells["TenKH"].Value.ToString();
            //    txtSoTK.Text = dataGridView1.Rows[e.RowIndex].Cells["SoTK"].Value.ToString();
            //    txtDiaChi.Text = dataGridView1.Rows[e.RowIndex].Cells["DiaChi"].Value.ToString();
            //}
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            //ẩn các control trước, sửa sau
            btnAdd.Enabled = false;
            btnDelete.Enabled = false;
            btnEdit.Enabled = false;
            btnSave.Enabled = true;
            groupBox1.Enabled = true;

            txtMaKH.Clear();
            txtSoTK.Clear();
            txtTenKH.Clear();
            txtDiaChi.Clear();
            txtMaKH.Focus();
            txtMaKH.Enabled = true;

            mod = "MAD";
        }

        private void btnEdit_Click(object sender, EventArgs e)
        {
            //ẩn các control trước, sửa sau
            btnAdd.Enabled = false;
            btnDelete.Enabled = false;
            btnEdit.Enabled = false;
            btnSave.Enabled = true;
            groupBox1.Enabled = true;

            txtMaKH.Enabled = false;
            txtTenKH.Focus();

            mod = "MED";
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            mod = "MDE";
            //Xóa trước, ẩn các control sau
            if (MessageBox.Show("Bạn có chắc chắn xóa?", "Câu hỏi", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                if (DeleteCustomer(txtMaKH.Text))
                    MessageBox.Show("Xóa khách hàng thành công");
                else
                    MessageBox.Show("Xóa khách hàng thất bại", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

                btnShowData.PerformClick();
            }
            btnAdd.Enabled = true;
            btnDelete.Enabled = true;
            btnEdit.Enabled = true;
            btnSave.Enabled = false;
            groupBox1.Enabled = false;
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            //Lưu trước, ẩn các control sau
            if (mod == "MAD")
            {
                //Insert
                if (InsertCustomer(txtMaKH.Text, txtTenKH.Text, txtSoTK.Text, txtDiaChi.Text))
                {
                    btnShowData.PerformClick();
                    MessageBox.Show("Thêm khách hàng thành công");
                }
                else
                    MessageBox.Show("Thêm khách hàng thất bại", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (mod == "MED")
            {
                //Update
                if (UpdateCustomer(txtMaKH.Text, txtTenKH.Text, txtSoTK.Text, txtDiaChi.Text))
                {
                    btnShowData.PerformClick();
                    MessageBox.Show("Sửa khách hàng thành công");
                }
                else
                    MessageBox.Show("Sửa khách hàng thất bại", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                //nothing
            }


            
            btnAdd.Enabled = true;
            btnDelete.Enabled = true;
            btnEdit.Enabled = true;
            btnSave.Enabled = false;
            groupBox1.Enabled = false;
        }



    }
}

/*
 Mô hình 1 lớp như trên trên gặp phải những lỗi sau đâu:
- Không tận dụng được lại code, như bạn thấy có những dòng khai báo và thao tác thực hiện lập lại rất nhiều lần. 
- Chưa tách các dữ liệu thông tin server ra file config
- Thực hiện theo mô hình 1 lớp rất khó bảo trì
Trong "Mô hình 3 lớp trong C#" chúng ta sẽ cải tiến những thiếu sót trên.
 */